package com.link2room.ironhide.facade.impl;

import com.link2room.common.dto.param.base.BaseParamDto;
import com.link2room.common.dto.result.base.L2RGroupBaseInfoDto;
import com.link2room.common.dto.result.base.L2RGroupPayOptionDto;
import com.link2room.common.service.ICommonService;
import com.link2room.common.util.ClassConverUtil;
import com.link2room.common.util.JacksonUtil;
import com.link2room.common.util.L2RAssert;
import com.link2room.common.util.TryExceptionUtil;
import com.link2room.enums.exception.IronhideSysExceptionEnum;
import com.link2room.ironhide.dto.param.manager.L2RGroupBaseInfoManagerParamDto;
import com.link2room.ironhide.entity.L2RGroupBaseinfo;
import com.link2room.ironhide.exception.IronhideException;
import com.link2room.ironhide.facade.IGroupFacadeService;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Optional;

/**
 * @author sqj88
 * @date 2017/10/20 14:34
 */
@Component("groupFacadeService")
public class GroupFacadeServiceImpl implements IGroupFacadeService {
    @Resource
    private ICommonService commonService;

    /**
     * 获取集团基本信息
     * @param baseParamDto
     * @return
     * @throws Exception
     */
    @Override
    public L2RGroupBaseInfoDto getGroupBaseInfo(BaseParamDto baseParamDto)throws Exception{
        L2RGroupBaseinfo l2RGroupBaseinfo=null;
        if(baseParamDto.getId()!=null){
            l2RGroupBaseinfo=commonService.findOneById(L2RGroupBaseinfo.class,baseParamDto.getId());
        }else {
            L2RAssert.stringBlank(baseParamDto.getLhotelGroupCode(),"集团代码为空");
            L2RGroupBaseinfo queryGroup=new L2RGroupBaseinfo();
            queryGroup.setLhotelGroupCode(baseParamDto.getLhotelGroupCode());
            l2RGroupBaseinfo=commonService.findOneEQ(L2RGroupBaseinfo.class,queryGroup);
        }
        L2RGroupBaseInfoDto l2RGroupBaseInfoDto1=Optional.ofNullable(l2RGroupBaseinfo).map(TryExceptionUtil.of(value->{
            L2RGroupBaseInfoDto l2RGroupBaseInfoDto=ClassConverUtil.copyPropertiesToDto(value, L2RGroupBaseInfoDto.class, false);
            Optional.ofNullable(value.getPayOption()).ifPresent(event->l2RGroupBaseInfoDto.setL2RGroupPayOptionDto(JacksonUtil.jsonToBean(event, L2RGroupPayOptionDto.class)));
            return l2RGroupBaseInfoDto;
        })).orElseThrow(()->new IronhideException(IronhideSysExceptionEnum.GROUP_NOT_EXIT));
        return l2RGroupBaseInfoDto1;
    }

    /**
     * 保存或更新集团基础信息
     * @param l2RGroupBaseInfoManagerParamDto
     * @return
     * @throws Exception
     */
    @Override
    public L2RGroupBaseInfoDto saveOrUpdateGroupBaseInfo(L2RGroupBaseInfoManagerParamDto l2RGroupBaseInfoManagerParamDto)throws Exception{
        L2RGroupBaseInfoDto l2RGroupBaseInfoDto=l2RGroupBaseInfoManagerParamDto.getL2RGroupBaseInfoDto();
        L2RAssert.objectNull(l2RGroupBaseInfoDto,"请求对象内容为空-l2RGroupBaseInfoDto");
        L2RGroupBaseinfo l2RGroupBaseinfo=ClassConverUtil.copyProperties(l2RGroupBaseInfoDto,L2RGroupBaseinfo.class);
        Optional.ofNullable(l2RGroupBaseInfoDto.getL2RGroupPayOptionDto()).ifPresent(value->l2RGroupBaseinfo.setPayOption(JacksonUtil.beanToJson(value)));
        commonService.saveOrUpdate(l2RGroupBaseinfo);
        l2RGroupBaseInfoDto.setId(l2RGroupBaseinfo.getId());
        return l2RGroupBaseInfoDto;
    }
}
